#include<iostream>
#include<vector>
#include<stack>
using namespace std;
int n=1;
int main()
{
	while (n != 0)
	{
		cin >> n;
		while (1)
		{
			vector<int> v;
			v.reserve(n+1);
			cin >> v[0];
			if (v[0] == 0) break;
			for (int i = 1; i < n; i++) cin >> v[i];
			stack<int> st; int sign = 0;
			for (int i = 1; i <= n; i++)
			{
				st.push(i);
				while ((!st.empty()) && st.top() == v[sign])
				{
					st.pop();
					sign++;
				}
			}
			if (sign == n) printf("Yes\n");
			else printf("No\n");
		}
		cout << endl;
	}
	return 0;
}

//#include<iostream>
//#include<list>
//using namespace std;
//int n, m;
//int main()
//{
//	cin >> n >> m;
//	list<int> l;
//	for (int i = 1; i <= n; i++) l.push_back(i);
//	list<int>::iterator it = l.begin();
//	int i = 1; int count = 0;
//	while (1)
//	{
//		if (i == m)
//		{
//			cout << *it << endl;
//			it=l.erase(it);
//			i = 1;
//			count++;
//		}
//		++i; 
//		if (it == l.end()) it = l.begin();
//		else ++it;
//		if (count == n) break;
//	}
//	return 0;
//}
